﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Common;
using Domain;
using System.ComponentModel;

namespace Ecommerce
{
    public class Utils
    {

        public bool ValidacaoCPF(string cpf)
        {
            int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            string tempCpf;
            string digito;
            int soma;
            int resto;
            cpf = cpf.Trim();
            cpf = cpf.Replace(".", "").Replace("-", "");
            if (cpf.Length != 11)
                return false;
            tempCpf = cpf.Substring(0, 9);
            soma = 0;
            for (int i = 0; i < 9; i++)
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];
            resto = soma % 11;
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;
            digito = resto.ToString();
            tempCpf = tempCpf + digito;
            soma = 0;
            for (int i = 0; i < 10; i++)
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];
            resto = soma % 11;
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;
            digito = digito + resto.ToString();
            return cpf.EndsWith(digito);

        }

        public static bool ValidacaoCNPJ(string cnpj)
        {
            int[] conj1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] conj2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int scale;
            int restante;
            string tudo;
            string cnpjtemporario;
            tudo = "";
            cnpj = cnpj.Trim();
            cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");
            if (cnpj.Length != 14) return false;
            cnpjtemporario = cnpj.Substring(0, 12);
            scale = 0;
            for (int i = 0; i < 12; i++)
                scale += int.Parse(cnpjtemporario[i].ToString()) * conj1[i];
            restante = (scale % 11);
            if (restante < 2) restante = 0;
            else restante = 11 - restante;
            tudo = restante.ToString();
            cnpjtemporario = cnpjtemporario + tudo;
            scale = 0;
            for (int i = 0; i < 13; i++)
                scale += int.Parse(cnpjtemporario[i].ToString()) * conj2[i];
            restante = (scale % 11);
            if (restante < 2) restante = 0;
            else restante = 11 - restante;
            tudo = tudo + restante.ToString();
            return cnpj.EndsWith(tudo);
        }


        public static DataTable ConvertListToDataTable<T>(List<T> list)
        {
            PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
            DataTable dt = new DataTable();

            for (int i = 0; i < props.Count; i++ )
            {
                PropertyDescriptor prop = props[i];
                dt.Columns.Add(prop.Name, prop.PropertyType);
            }
            object[] values = new object[props.Count];
            List<T> lista = new List<T>();
            lista = list;
            foreach (T item in lista)
            {
                for (int i = 0; i < values.Length; i++)
                {
                    values[i] = props[i].GetValue(item);
                }
                dt.Rows.Add(values);
            }
            return dt;   
        }
    }
}
